package _1_goodfirst;

public class _2_Calculatej 
{
	public static void main(String[]args)
	{
		{
			//常数
			//其它进制自动转十进制
			//二进制0b或0B
			System.out.println(0b110);
			//八进制0
			System.out.println(0324);
			//十六进制0x或0X
			System.out.println(0xA57F);
			/*字符常量''，可以是英语字母、数字、标点符号以及由转义(\)序列表示的特殊符号。（只能表示一
			 个字符）*/
			System.out.println('&');
			//不换行print，换行println或以print（"字符串\r\n“）的形式
			System.out.print("hello ");
			System.out.println("world");
			//布尔常量
			System.out.println(true);
			System.out.println(false);
			//null常量，不能直接输出
			//System.out.println(null);
			System.out.println("-----------------------常数-------------------------");
		}
		{
			//变量
			//整数类型byte(1byte),short(2byte),int(默认类型,4byte),long(8byte)
			byte b0 = -128;  // byte范围[-128,127]
			//byte b1 = 128; // 报错
			System.out.println(b0);
			long num1 = 135L;
			System.out.println(num1);
			//浮点数类型float(4byte),double(8byte)
			float num2 = 123456789.123456789f;    //小数默认类型是double，这里要加上后缀f或F
			float num233 = 233;  //整数的话可以不加f
			float a = 'a';
			double num3 = 123456789123456789123456789.1234567890D;
			double num4 = 1234567.12345678901234567890D;
			double num5 = 123456.1234567890123456789D;
			System.out.println(num2);
			System.out.println(num233);
			System.out.println(a);
			System.out.println(num3);
			System.out.println(num4);
			System.out.println(num5);
			//字符类型char
			char c1 = 'a';
			char c2 = 97;
			System.out.println(c1);
			System.out.println(c2);
			//布尔类型的变量boolean,用于定义条件判断
			boolean b1 = true;
			boolean b2 = false;
			System.out.println(b1);
			System.out.println(b2);
			System.out.println("-----------------------变量类型-------------------------");
		}
		{
			//变量类型的转换
			//自动类型转换，也叫隐式类型转换，不需要显式声明，前提是转换的类型适用范围比原类型大
			byte b1 = 2;
			int i1 = b1;
			System.out.println(i1);
			/* 强制类型转换，也叫显式类型转换，转换的类型适用范围比原类型小，转换格式为：
			目标类型 名 = （原类型）值 */
			byte b2;
			int i2 = 298;
			b2 = (byte)i2;
			System.out.println(b2);
			//上面是数据丢失的例子,int能输出4字节的整数，而byte只能1字节，强行转换使得前三个字节的数据丢失
			byte b3 = 3;
			byte b4 = 4;
			//byte b5 = b3 + b4;两个byte类型进行运算会自动转换为int类型，正确操作如下：
			byte b5 = (byte)(b3 + b4);
			System.out.println(b5);
			//注意，byte,short,char在运算时都会转换为int类型
			System.out.println("-----------------------变量类型转换-------------------------");
		}
		{
			//运算符
			/* 算术运算符
			 * +：加法
			 * -：减法
			 * *：乘法
			 * /：除法
			 * %；取余 */
			int t1= 10;
			int t2= 20;
			System.out.println(t1 + t2);
			System.out.println(t1 - t2);
			System.out.println(t1 * t2);
			System.out.println(t1 / t2);
			System.out.println(t1 % t2);
			//在java中，整数的运算只能得到整数
			System.out.println(5 / 2);
			//需换成浮点数,结果保留到刚好除完，除不完结果会自动四舍五入
			System.out.println(5.0 / 2);
			System.out.println(5 / 2.0);
			System.out.println(1.0 / 8);
			System.out.println(10 / 6.0);
			int a = 10;
			a++;//自增，a + 1
			System.out.println(a);
			--a;//自减，a - 1
			System.out.println(a);
			//参与运算使用时
			int b1 = a++;//+放在a后面，先给b赋a的值10，a再自增。先参与运算再自增
			System.out.println(b1);
			int b2 = ++a;//+放在a前面，a先自增，再给b赋a的值12。先自增再参与运算
			System.out.println(b2);
			System.out.println("-------------------------算术运算符-----------------------");
		}
		{
			//赋值运算符
			int m1,m2,m3,m4,m5;
			m1 = m2 = m3 = m4 = m5 = 10;
			int n = 20;
			m1 += n; //等效于m = m + n
			m2 -= n; //以下均同理
			m3 *= n; 
			m4 /= n; 
			m5 %= n;
			System.out.println(m1);
			System.out.println(m2);
			System.out.println(m3);
			System.out.println(m4);
			System.out.println(m5);
			byte b = 10;
			//b = n + b;（这样会报错），实际上b += n等价于b = (byte)(b + n),是包含强制类型转换的
			b = (byte)(b + n);
			System.out.println(b);
			//比较运算符==，<=,>=,<,>,=!(不等于），输出结果是布尔值(true,false)
			int c = 10;
			System.out.println(c = n);//输出结果是c = 20，而不是true或false,java中 = 是赋值，而不是等于
			System.out.println("---------------------赋值运算符----------------------");
		}
		{
			//逻辑运算符,逻辑与&，或|，非!，异或^
			boolean l = true;
			boolean o = false;
			//格式如下，知识是数字逻辑里的知识，把true当做1，false当作0,&即乘号，|即加号，看作逻辑表达式
			System.out.println(l | o);
			System.out.println(!l ^ o | l & l);//true
			System.out.println(l ^ !(o | l));//true，（）改变运算优先级，符合数学常识
			//短路与&&，短路或||
			int a1,a2;
			a1 = a2 = 10;
			int b1,b2;
			b1 = b2 = 20;
			System.out.println(a1++ > 10 & b1++ > 20);//false
			System.out.println(a1);//11
			System.out.println(b1);//21
			//比较一下
			System.out.println(a2++ > 10 && b2++ > 20);
			//false，运行到false后，这条程序运行到&&就已经停了
			System.out.println(a2);//11
			System.out.println(b2);//20
			//同理，||，只要运行到一个true，程序就会短路
			System.out.println("-----------------------逻辑运算符------------------------");
		}
		{
			//if...else条件语句
			int a = 60;
			if
			(a >=60 & a < 75)//这里不能加;	不然if语句在这里就终止了
			{System.out.print("您这次考试成绩评价为C等级");}
			else if(a >= 75 & a < 90)
			{System.out.print("您这次考试成绩评价为B等级");}
			else if(a >= 90 & a <= 100) 
			{System.out.print("您这次考试成绩评价为A等级");}
			else if(a < 60)
			{System.out.print("您这次考试成绩评价为D等级");}
			else {System.out.println("系统错误");}
			System.out.println("，请继续努力！");
			System.out.println("---------------if...else条件语句---------------");
		}
	}	
}